package com.zenithmind.document.service;

import com.zenithmind.document.pojo.vo.DocumentVO;

import java.util.List;

/**
 * 文档搜索服务接口
 * 遵循接口隔离原则：专注于搜索功能
 * 遵循单一职责原则：只负责文档搜索相关操作
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface DocumentSearchService {

    /**
     * 搜索文档
     * 
     * @param keyword 关键词
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 文档列表
     */
    List<DocumentVO> searchDocuments(String keyword, String userId, Integer limit);

    /**
     * 高级搜索文档
     * 
     * @param keyword 关键词
     * @param categoryId 分类ID
     * @param type 文档类型
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 文档列表
     */
    List<DocumentVO> advancedSearchDocuments(String keyword, String categoryId, 
                                           String type, String userId, Integer limit);

    /**
     * 按标签搜索文档
     * 
     * @param tags 标签列表
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 文档列表
     */
    List<DocumentVO> searchDocumentsByTags(List<String> tags, String userId, Integer limit);

    /**
     * 获取相关文档
     * 
     * @param documentId 文档ID
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 文档列表
     */
    List<DocumentVO> getRelatedDocuments(String documentId, String userId, Integer limit);

    /**
     * 获取推荐文档
     * 
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 文档列表
     */
    List<DocumentVO> getRecommendedDocuments(String userId, Integer limit);

    /**
     * 获取热门文档
     * 
     * @param limit 限制数量
     * @return 文档列表
     */
    List<DocumentVO> getHotDocuments(Integer limit);

    /**
     * 获取最新文档
     * 
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 文档列表
     */
    List<DocumentVO> getLatestDocuments(String userId, Integer limit);

    /**
     * 获取收藏文档
     * 
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 文档列表
     */
    List<DocumentVO> getFavoriteDocuments(String userId, Integer limit);

    /**
     * 获取最近访问文档
     * 
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 文档列表
     */
    List<DocumentVO> getRecentDocuments(String userId, Integer limit);

    /**
     * 获取用户文档
     * 
     * @param creatorId 创建者ID
     * @param limit 限制数量
     * @return 文档列表
     */
    List<DocumentVO> getUserDocuments(String creatorId, Integer limit);

    /**
     * 按分类获取文档
     * 
     * @param categoryId 分类ID
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 文档列表
     */
    List<DocumentVO> getDocumentsByCategory(String categoryId, String userId, Integer limit);
}
